﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BlueCMS.Core.Data.Query.Conditions
{
    public class ConditionChain : ConditionBase, IStartNode
    {
        IStartNode IStartNode.StartGroup()
        {
            return (IStartNode)base.StartGroup();
        }

        ILHSNode IStartNode.Aggregate(string clause)
        {
            return (ILHSNode)base.Aggregate(clause);
        }

        ILHSNode IStartNode.Column(string name)
        {
            return (ILHSNode)base.Column(name);
        }

        ILHSNode IStartNode.Constant(object value)
        {
            return (ILHSNode)base.Constant(value);
        }

        ILHSNode IStartNode.Parameter(object value)
        {
            return (ILHSNode)base.Parameter(value);
        }

        ILHSNode IStartNode.Parameter(object value, string name)
        {
            return (ILHSNode)base.Parameter(value, name);
        }

        ILHSNode IStartNode.SubSelect(Action<SelectQuery> subquery)
        {
            return (ILHSNode)base.SubSelect(subquery);
        }

        IEndNode IStartNode.Exists(Action<SelectQuery> subquery)
        {
            return (IEndNode)base.Exists(subquery);
        }

        IEndNode IStartNode.NotExists(Action<SelectQuery> subquery)
        {
            return (IEndNode)base.NotExists(subquery);
        }

        //// Multi Operators
        //IConditionNode IConditionChain.In(object nameOrExpression, params object[] namesOrExpressions)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, MultiOperators.In, namesOrExpressions);
        //}

        //IConditionNode IConditionChain.NotIn(object nameOrExpression, params object[] namesOrExpressions)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, MultiOperators.NotIn, namesOrExpressions);
        //}

        //// Binary Operators
        //IConditionNode IConditionChain.Equals(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.Equals, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.NotEquals(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.NotEquals, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.GreaterThan(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.GreaterThan, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.GreaterThanOrEqual(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.GreaterThanOrEqual, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.LessThan(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.LessThan, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.LessThanOrEqual(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.LessThanOrEqual, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.Like(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.Like, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.NotLike(object nameOrExpressionLHS, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, BinaryOperators.NotLike, nameOrExpressionRHS);
        //}

        //// Unary Operators
        //IConditionNode IConditionChain.IsNull(object nameOrExpression)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, UnaryOperators.IsNull);
        //}

        //IConditionNode IConditionChain.IsNotNull(object nameOrExpression)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, UnaryOperators.IsNotNull);
        //}

        //IConditionNode IConditionChain.Exists(object nameOrExpression)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, UnaryOperators.Exists);
        //}

        //IConditionNode IConditionChain.NotExists(object nameOrExpression)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, UnaryOperators.NotExists);
        //}

        //IConditionNode IConditionChain.Condition(object nameOrExpression, MultiOperators op, params object[] namesOrExpressions)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression,op, namesOrExpressions);
        //}

        //IConditionNode IConditionChain.Condition(object nameOrExpressionLHS, BinaryOperators op, object nameOrExpressionRHS)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpressionLHS, op, nameOrExpressionRHS);
        //}

        //IConditionNode IConditionChain.Condition(object nameOrExpression, UnaryOperators op)
        //{
        //    return (IConditionNode)base.Condition(nameOrExpression, op);
        //}
    }
}
